package com.zrrd.learn.chapter08.thread;

/**
 * 线程安全问题
 *
 * @author asus
 * @version 1.0
 * @date 2023/8/2 16:08
 */

/**
 * 安全
 */

public class ThreadSafe {
    private static int a = 0;

    /**
     * 安全：synchronized 加同步锁，使每个线程运行时不会冲突或失效
     */
    private  synchronized  static void add(){
        a++;
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 10000; i++) {
                add();
            }
        });

        Thread t2 = new Thread(()->{
            for (int i = 0; i < 10000; i++) {
                add();
            }
        });

//        计算运算时间(毫秒数)，在start方法之前和输出之后
        long s1=System.currentTimeMillis();
        t1.start();
        t2.start();

        //捕获处理，使t1和t2运行完之后再执行main方法
        try{
            t1.join();
            t2.join();
        }catch (Exception e){
            //Exception  错误
            System.out.println("出错了");
        }

        System.out.println(a);

        long s2 = System.currentTimeMillis();

        System.out.println("用时==>"+(s2-s1));



    }
}
